﻿//统一文件为utf-8编码编译
#pragma execution_character_set("utf-8")
///////////////////////////////////////////////////////////////////////////
// 文件名:     datainteractionstruct.h
// 描述:
// 作者:      颜磊
// 创建时间:   2024-06-08 23:38
///////////////////////////////////////////////////////////////////////////
#ifndef DATAINSTERACTIONSTRUCT_H
#define DATAINSTERACTIONSTRUCT_H
#include "databasestruct.h"
#include "connectionstruct.h"

#include <string>
using namespace std;

//================================报文类型
#define MSG_TYPE_PROGRESS_INFO  1       //进程信息
#define MSG_TYPE_PROGRESS_VIEW  2       //进程视图
#define MSG_TYPE_PROGRESS_CMD   3       //进程管理
#define MSG_TYPE_SERVER_FILE    4       //服务端文件
#define MSG_TYPE_STATUS         5       //状态信息

#define PROGRESS_CMD_SAVE   1       //进程写入
#define PROGRESS_CMD_DEL    2       //进程删除
#define PROGRESS_CMD_START  3       //进程启动
#define PROGRESS_CMD_STOP   4       //进程停止


#pragma pack(push,1)
//====================================数据包头
/**
 * @brief The PackHeader struct 数据包头
 */
struct PackHeader
{
    uint8_t msgType;//报文类型
    uint64_t packLen;//数据包长度
    uint64_t dataLen;//载荷数据长度
    PackHeader(){
        memset(this,0,sizeof (PackHeader));
    }
    PackHeader(uint8_t in_msgType,uint64_t in_packLen,uint64_t in_dataLen){
        memset(this,0,sizeof (PackHeader));
        msgType = in_msgType;
        packLen = in_packLen;
        dataLen = in_dataLen;
    }
};

/**
 * @brief The ProgressInfoPack struct 进程信息包
 */
struct ProgressInfoPack{
    ProgressInfo info;
    //====================不入库
    bool enabled;//是否启动
    uint64_t runTime;//运行时长（s）
    float cpuUsage;//cpu占用率
    char stateMsg[20];//运行信息
    uint64_t memory;//内存
    uint64_t virtualMemory;//虚拟内存
    uint64_t ioRead;//io读
    uint64_t ioWrite;//io写

    ProgressInfoPack(){
        memset(this,0,sizeof (ProgressInfoPack));
    }

    void setStateMsg(string str){
        memset(stateMsg,0,20);
        memcpy(stateMsg,str.c_str(),str.length() < 20 ? str.length() : 20);
    }
};
/**
 * @brief The ProgressObject struct 进程信息和连接信息大包
 */
struct ProgressObject{
    ConnectionInfo connectionInfo;
    ProgressInfoPack progressInfoPack;
};
/**
 * @brief The ProgressInfoPack struct 进程视图头
 */
struct ProgressViewHeader{
    uint64_t progressId;
    uint64_t viewSize;

    ProgressViewHeader(){
        memset(this,0,sizeof (ProgressViewHeader));
    }
};
/**
 * @brief The ProgressCmdHeader struct 进程控制指令头
 */
struct ProgressCmdHeader{
    uint8_t cmdType;//控制类型
    uint64_t progressId;//进程id
    ProgressCmdHeader(){
        memset(this,0,sizeof (ProgressCmdHeader));
    }
};
//Q_DECLARE_METATYPE(ProgressCmdHeader);
/**
 * @brief The ServerFileHeader struct 远端文件列表头
 */
struct ServerFileHeader{
    char folder[4096];//文件夹路径
    char likeName[256];//搜索名字
    char filter[20];
    uint64_t fileCount;//文件数量
    ServerFileHeader(){
        memset(this,0,sizeof (ServerFileHeader));
    }
    void setFolder(string str){
        memset(folder,0,4096);
        memcpy(folder,str.c_str(),str.length() < 4096 ? str.length() : 4096);
    }
    void setLikeName(string str){
        memset(likeName,0,256);
        memcpy(likeName,str.c_str(),str.length() < 256 ? str.length() : 256);
    }
    void setFilter(string str){
        memset(filter,0,20);
        memcpy(filter,str.c_str(),str.length() < 20 ? str.length() : 20);
    }
};
/**
 * @brief The ServerFile struct 远端文件
 */
struct ServerFile{
    bool isFolder;//是否文件夹
    char fileName[256];//文件名称
    uint64_t fileSize;//文件大小
    void setFileName(string str){
        memset(fileName,0,256);
        memcpy(fileName,str.c_str(),str.length() < 256 ? str.length() : 256);
    }
};
#pragma pack(pop)
#endif // DATAINSTERACTIONSTRUCT_H
